package util.pagingOpt.impl;

import dao.BaseDao;
import pojo.PageEntity;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public abstract class Paging{
    public PageEntity getPageEntity() {
        return pageEntity;
    }

    protected PageEntity pageEntity;
    protected BaseDao baseDao = new BaseDao();
    protected String sqlCount;
    protected String sqlPaging;

    public Paging(int pageSize, String sqlCount, String sqlPaging) {
        this.sqlCount = sqlCount;
        this.sqlPaging = sqlPaging;
        pageEntity = new PageEntity();
        pageEntity.setPageSize(pageSize);
        pageEntity.setCurrentPage(1);
        pageEntity.setTotalCount(this.getTotalCount(sqlCount));
        pageEntity.setTotalPage(this.getTotalPage());
        pageEntity.setLists(getList());
    }
    public abstract List<?> getList();

    private int getTotalCount(String sqlCount) {
        int count = 0;
        try (ResultSet rs = baseDao.executeSelect(sqlCount, null)){
            if (rs.next())
                count = rs.getInt(1);
        } catch (SQLException e) {
            count = -1;
            e.printStackTrace();
        }
        return count;
    }

    public void setCurrentPage(int currentPage) {
        this.pageEntity.setCurrentPage(currentPage);
        this.pageEntity.setTotalCount(getTotalCount(sqlCount));
        this.pageEntity.setTotalPage(getTotalPage());
        this.pageEntity.setLists(getList());
    }

    private int getTotalPage(){
       return pageEntity.getTotalCount() % pageEntity.getPageSize() == 0 ? pageEntity.getTotalCount() / pageEntity.getPageSize() : pageEntity.getTotalCount() / pageEntity.getPageSize() + 1;
    }

}
